/**
 * Copyright (C), 2018-2018, https://blog.fundodoo.com
 * Author:   醉探索戈壁
 * Date:     2018/8/29 下午7:45
 * Description: 测试数组
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改时间           版本号              描述
 * https://blog.fundodoo.com/2018/08/29/573.html
 */
package blog.fundodoo.com.algorithm;


/**
 *
 * @author 醉探索戈壁
 * @create 2018/8/29 下午7:45
 * @since 1.0.0
 */
public class AlgorithmTest {

    public static int[] init(){
        int[] list = new int[10000];
        for (int i = 0; i < 10000; i++) {
            list[i] = (int) (Math.random() * 100000);
        }
        return list;
    }

    /**
     * 测试冒泡排序耗费的时间
     */
    public static void testBubble(int[] list) {

        // 冒泡排序
        long start = System.currentTimeMillis();
        BubbleSort.bubbleSort(list);
        long end = System.currentTimeMillis();
        System.out.println("冒泡排序耗费的时间：" + (end - start));
        display(list);
    }

    /**
     * 测试直接插入排序耗费的时间
     */
    public  static void testInsert(int[] list) {

        // 直接插入排序
        long start = System.currentTimeMillis();
        InsertSort.insertSort(list);
        long end = System.currentTimeMillis();
        System.out.println("直接插入排序耗费的时间：" + (end - start));
        display(list);
    }
    /**
     * 测试堆排序排序耗费的时间
     */
    public  static void testHeap(int[] list) {

        long start = System.currentTimeMillis();
        HeapSort.heapSort(list);
        long end = System.currentTimeMillis();
        System.out.println("堆排序排序耗费的时间：" + (end - start));
        display(list);
    }
    /**
     * 测试归并排序排序排序耗费的时间
     */
    public  static void testMerge(int[] list) {

        long start = System.currentTimeMillis();
        MergeSort.mergeSort(list, new int[list.length], 0, list.length - 1);
        long end = System.currentTimeMillis();
        System.out.println("归并排序排序耗费的时间：" + (end - start));
        display(list);
    }
    /**
     * 测试希尔排序耗费的时间
     */
    public  static void testShell(int[] list) {

        // 希尔排序
        long start = System.currentTimeMillis();
        ShellSort.shellSort(list);
        long end = System.currentTimeMillis();
        System.out.println("希尔排序耗费的时间：" + (end - start));
        display(list);
    }
    /**
     * 快速排序耗费的时间
     */
    public  static void testQuick(int[] list) {

        // 快速排序
        long start = System.currentTimeMillis();
        QuickSort.quickSort(list,0, list.length - 1);
        long end = System.currentTimeMillis();
        System.out.println("快速排序耗费的时间：" + (end - start));
        display(list);
    }
    /**
     * 直接选择排序耗费的时间
     */

    public  static void testSelection(int[] list) {

        long start = System.currentTimeMillis();
        SelectionSort.selectionSort(list);
        long end = System.currentTimeMillis();
        System.out.println("直接排序耗费的时间：" + (end - start));
        display(list);
    }
    /**
     * 遍历打印前10个数
     */

    private  static void display(int[] list) {
        System.out.println("********排序之后的前10个数start********");
        if (list != null && list.length > 0) {
            for (int i = 0; i < 10; i++) {
                System.out.print(list[i] + " ");
            }
            System.out.println();
        }
        System.out.println("********排序之后的前10个数end**********");
        System.out.println();
    }

    public static void main(String[] args) {
        int[] list = init();
        testQuick(list);//快速排序
        testShell(list);//希尔排序
        testHeap(list);//堆排序
        testMerge(list);//归并排序
        testSelection(list);//直接排序
        testInsert(list);//直接插入排序
        testBubble(list);//冒泡排序
    }
}
